// 将字符串字面量类型按照指定字符，分割为元组。无法分割则返回原字符串字面量

// 初始化定义一个 空字数组 []，每次将分离出来的 L 塞进去， 
// 最后，当 T只剩下分隔符左边的字符串， 不包含分隔符时，将剩余的部分添加到数组最后

// T 是原始字符串， S 是分隔符
type SplitString<T, S extends string, A extends any[] = []> =
    T extends `${infer L}${S}${infer R}`
    ? SplitString<R, S, [...A, L]>
    : [...A,T]  // 如果用 A ，则会丢失最后一次分割出来的右边
type A1 = SplitString<"handle-open-flag", "-">; // ["handle", "open", "flag"]
type A2 = SplitString<"open-flag", "-">; // ["open", "flag"]
type A3 = SplitString<"handle.open.flag", ".">; // ["handle", "open", "flag"]
type A4 = SplitString<"open.flag", ".">; // ["open", "flag"]
type A5 = SplitString<"open.flag", "-">; // ["open.flag"]

export {}